/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.Baterias;
import com.camachosanchez.bean.Vehiculos;
import com.camachosanchez.controler.jpa.BateriasJpaController;
import com.camachosanchez.gui.table.RenderizadorBlanco;
import com.camachosanchez.gui.table.TableSorter;
import com.camachosanchez.reportes.bean.HistorialMovimientosBateria;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.JPAUtil;
import com.camachosanchez.util.SQLUtil;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import net.coderazzi.filters.gui.TableFilterHeader;

/**
 *
 * @author ZULLY
 */
public class HistorialBateria extends javax.swing.JDialog {

    private int idBateria;
    private SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
    private DefaultTableModel modeloCambios;
    private TableFilterHeader filterHeaderCambios;

    /**
     * Creates new form HistorialBaterias
     */
    public HistorialBateria(java.awt.Frame parent, boolean modal, int idBateria, String codigo) {
        super(parent, modal);
        initComponents();
        this.setTitle(".:: Historial de batería " + codigo + " ::.");
        modeloCambios = new DefaultTableModel() {

            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        Object[] columnsC = new Object[]{"", "FECHA", "VEHÍCULO", "TALLER", "KILOMETRAJE", "TIPO", "POSICIÓN"};
        modeloCambios.setColumnIdentifiers(columnsC);
        this.idBateria = idBateria;
        filterHeaderCambios = new TableFilterHeader();
        TableSorter tableSorterCambios = new TableSorter(modeloCambios, tblCambios.getTableHeader());
        tblCambios.setModel(tableSorterCambios);
        filterHeaderCambios.setTable(tblCambios);
        RenderizadorBlanco render = new RenderizadorBlanco(tblCambios.getTableHeader().getDefaultRenderer());
        tblCambios.setDefaultRenderer(Object.class, render);
        tblCambios.getTableHeader().setReorderingAllowed(false);
        this.setSize(700, 400);
        this.setLocationRelativeTo(null);
        llenarTablaMontajes();
        GUIUtil.addEscapeKey(this);
    }

    private void llenarTablaMontajes() {
        EntityManagerFactory emf;
        emf = JPAUtil.getEntityManagerFactory();
        EntityManager em = emf.createEntityManager();
        Query q = em.createQuery("SELECT C.fecha, C.idVehiculo.placa, C.idTaller.nombre, C.kilometraie,"
                + " D.tipo, D.posicion"
                + " FROM DetalleControlCambioBateria D"
                + " JOIN D.idControlCambioNeumatico C"
                + " WHERE D.idBateria.id = :idBateria ORDER BY C.fecha, C.fechaInsercionActualizacion");
        q.setParameter("idBateria", this.idBateria);
        Iterator results = q.getResultList().iterator();
        Date fecha;
        Object[] fila;
        while (results.hasNext()) {
            Object[] tupla = (Object[]) results.next();
            fila = new Object[7];
            if (tupla[0] != null) {
                fecha = (Date) tupla[0];
                fila[1] = formatoFecha.format(fecha);
            }
            fila[2] = tupla[1];
            fila[3] = tupla[2];
            fila[4] = tupla[3];
            int tipo = Integer.parseInt(tupla[4].toString());
            switch (tipo) {
                case -1:
                    fila[5] = "Desmontaje";
                    break;
                case 1:
                    fila[5] = "Montaje";
                    break;
                default:
                    fila[5] = "";
                    break;
            }
            if (Integer.valueOf(tupla[5].toString()) <= 0) {
                tupla[5] = "R";
            }
            fila[6] = tupla[5];
            if (tipo != 0) {
                modeloCambios.addRow(fila);
            }
        }
        GUIUtil.SetAnchoColumnas(tblCambios);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToolBar1 = new javax.swing.JToolBar();
        jPanel3 = new javax.swing.JPanel();
        btnVerUbicacion = new javax.swing.JButton();
        btnImprimir = new javax.swing.JButton();
        jPanel4 = new javax.swing.JPanel();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblCambios = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jToolBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);
        jToolBar1.setOpaque(false);

        jPanel3.setBackground(new java.awt.Color(255, 255, 255));
        jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        btnVerUbicacion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_ubicacion.png"))); // NOI18N
        btnVerUbicacion.setToolTipText("Ver ubicación");
        btnVerUbicacion.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnVerUbicacion.setFocusable(false);
        btnVerUbicacion.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnVerUbicacion.setMaximumSize(new java.awt.Dimension(22, 22));
        btnVerUbicacion.setMinimumSize(new java.awt.Dimension(22, 22));
        btnVerUbicacion.setPreferredSize(new java.awt.Dimension(22, 22));
        btnVerUbicacion.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnVerUbicacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVerUbicacionActionPerformed(evt);
            }
        });
        jPanel3.add(btnVerUbicacion);

        btnImprimir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_print.png"))); // NOI18N
        btnImprimir.setToolTipText("Imprirmir");
        btnImprimir.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnImprimir.setFocusable(false);
        btnImprimir.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnImprimir.setMaximumSize(new java.awt.Dimension(22, 22));
        btnImprimir.setMinimumSize(new java.awt.Dimension(22, 22));
        btnImprimir.setPreferredSize(new java.awt.Dimension(22, 22));
        btnImprimir.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprimirActionPerformed(evt);
            }
        });
        jPanel3.add(btnImprimir);

        jToolBar1.add(jPanel3);

        getContentPane().add(jToolBar1, java.awt.BorderLayout.PAGE_START);

        jPanel4.setLayout(new java.awt.BorderLayout());

        jTabbedPane1.setBackground(new java.awt.Color(188, 211, 226));
        jTabbedPane1.setOpaque(true);

        jPanel1.setBackground(new java.awt.Color(188, 211, 226));
        jPanel1.setLayout(new java.awt.BorderLayout());

        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("MONTAJES Y DESMONTAJES");
        jLabel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 1, 5, 1));
        jPanel1.add(jLabel1, java.awt.BorderLayout.PAGE_START);

        tblCambios.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        tblCambios.setRowHeight(22);
        tblCambios.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1.setViewportView(tblCambios);

        jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jTabbedPane1.addTab("HISTORIAL DE CAMBIOS", jPanel1);

        jPanel4.add(jTabbedPane1, java.awt.BorderLayout.CENTER);

        getContentPane().add(jPanel4, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnVerUbicacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVerUbicacionActionPerformed
        // TODO add your handling code here:
        BateriasJpaController dao = new BateriasJpaController(null);
        int categoria = dao.findBaterias(idBateria).getIdCategoria().getId();
        if (categoria == Constantes.CATEGORIA_MONTADO) {
            Vehiculos v = SQLUtil.getUnidadMontadaDeBateria(idBateria);
            if (v != null) {
                MontajeDesmontaje montaje = new MontajeDesmontaje(v);
                montaje.setIdNeumaticoResaltado(idBateria);
                montaje.setSize(Principal.getInstance().getEscritorio().getSize());
                Principal.getInstance().getEscritorio().add(montaje);
                montaje.setVisible(true);
                try {
                    montaje.setMaximum(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                montaje.generarEsquemaMontaje();
                montaje.agregarDescripcionNeumaticos();
            }
        } else {
            JOptionPane.showMessageDialog(this, "Vista no disponible. Batería no montada en ninguna unidad.");
        }
    }//GEN-LAST:event_btnVerUbicacionActionPerformed

    private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprimirActionPerformed
        // TODO add your handling code here:
//        final DialogoCargando dlgLogin = new DialogoCargando(Principal.getInstance(), true);
//        Thread hilo = new Thread() {
//
//            @Override
//            public void run() {
        try {
            BateriasJpaController dao = new BateriasJpaController(null);
            Baterias baterias = dao.findBaterias(idBateria);
            if (baterias != null) {
                HistorialMovimientosBateria info = new HistorialMovimientosBateria();
                info.setCodigo(baterias.getCodigo());
                info.setMarca(baterias.getIdMarca().getNombre());
                info.setNumeroPlacas("" + baterias.getNroPlacas());
                int cantCambios = modeloCambios.getRowCount();
                String fecha, vehiculo, taller, kilometraje, tipo, posicion;
                List<String[]> listaMontajes = new ArrayList<String[]>();
                for (int i = 0; i < cantCambios; i++) {
                    fecha = (modeloCambios.getValueAt(i, 1) == null) ? "" : modeloCambios.getValueAt(i, 1) + "";
                    vehiculo = (modeloCambios.getValueAt(i, 2) == null) ? "" : modeloCambios.getValueAt(i, 2) + "";
                    taller = (modeloCambios.getValueAt(i, 3) == null) ? "" : modeloCambios.getValueAt(i, 3) + "";
                    kilometraje = (modeloCambios.getValueAt(i, 4) == null) ? "" : modeloCambios.getValueAt(i, 4) + "";
                    tipo = (modeloCambios.getValueAt(i, 5) == null) ? "" : modeloCambios.getValueAt(i, 5) + "";
                    posicion = (modeloCambios.getValueAt(i, 6) == null) ? "" : modeloCambios.getValueAt(i, 6) + "";
                    String[] fila = new String[6];
                    fila[0] = fecha;
                    fila[1] = vehiculo;
                    fila[2] = taller;
                    fila[3] = kilometraje;
                    fila[4] = tipo;
                    fila[5] = posicion;
                    listaMontajes.add(fila);
                }
                info.setListaMontajes(listaMontajes);
                Impresor impresor = new Impresor(info);
                Principal.getInstance().getEscritorio().add(impresor);
                impresor.setVisible(true);
                impresor.setMaximum(true);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
//            }
//        };
//        hilo.start();
//        dlgLogin.setVisible(true);
    }//GEN-LAST:event_btnImprimirActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnImprimir;
    private javax.swing.JButton btnVerUbicacion;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JTable tblCambios;
    // End of variables declaration//GEN-END:variables
}
